package com.hd.sup.modules.alarm.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.hd.sup.core.annotation.DataScope;
import com.hd.sup.modules.alarm.model.AlarmDailyStatis;
import com.hd.sup.modules.poi.model.EnterpriseAlarmExport;
import com.hd.sup.modules.poi.model.RegionAlarmExport;
import com.hd.sup.modules.vehicle.model.VehicleAlarmDailyStatis;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 报警基础数据表 | 企业编号 报警类型  统计时间 Mapper 接口
 * </p>
 *
 * @author chentl123
 * @since 2020-12-28
 */
public interface AlarmDailyStatisMapper extends BaseMapper<AlarmDailyStatis> {
    /**
     * @return java.util.List<java.util.Map < java.lang.String, java.lang.Object>>
     * @author chentl
     * @description 获取车辆告警趋势 近 3 、7、 30天
     * @date 2020/12/28 6:53 下午
     * @params [alarmDailyStatis]
     */
    @DataScope
    List<Map<String, Object>> getTrendData(@Param("alarmDailyStatis") AlarmDailyStatis alarmDailyStatis);

    /**
     * @return java.util.List<java.util.Map < java.lang.String, java.lang.Object>>
     * @author chentl
     * @description 查询分析报告需要的报警数据
     * @date 2021/2/5 11:21 上午
     * @params [alarmDailyStatis]
     */
    List<Map<String, Object>> trendDataForReport(@Param("alarmDailyStatis") VehicleAlarmDailyStatis alarmDailyStatis);

    /**
     * @return java.util.List<java.util.Map < java.lang.String, java.lang.Object>>
     * @author chentl
     * @description 查询报警企业处置率top5
     * @date 2020/12/29 3:40 下午
     * @params [deptIds]
     */
    List<Map<String, Object>> getHandleRateTop5(@Param("deptIds") List<String> deptIds);

    /**
     * @return java.util.List<java.util.Map < java.lang.String, java.lang.Object>>
     * @author chentl
     * @description 处置率最低的 Top20 企业排行
     * @date 2021/2/19 2:24 下午
     * @params [deptIds]
     */
    List<Map<String, Object>> getWorstEnterpriseHandleRateTop20(@Param("alarmDailyStatis") VehicleAlarmDailyStatis alarmDailyStatis, @Param("deptIds") List<String> deptIds);

    /**
     * @return java.util.Map<java.lang.String, java.lang.Object>
     * @author chentl
     * @description 处置率占比超过90%的企业
     * @date 2021/2/19 2:50 下午
     * @params [deptIds]
     */
    Map<String, Object> getStandardEnterpriseCount(@Param("alarmDailyStatis") VehicleAlarmDailyStatis alarmDailyStatis, @Param("deptIds") List<String> deptIds);

    /**
     * @return java.util.List<java.util.Map < java.lang.String, java.lang.Object>>
     * @author chentl
     * @description 获取报警企业信息分页数据
     * @date 2020/12/30 1:42 下午
     * @params [alarmDailyStatis]
     */
    @DataScope
    List<Map<String, Object>> getAlarmEnterprisePage(@Param("page") Page<Map<String, Object>> page, @Param("alarmDailyStatis") AlarmDailyStatis alarmDailyStatis);

    /**
     * @return java.util.List<java.util.Map < java.lang.String, java.lang.Object>>
     * @author chentl
     * @description 获取区域报警信息分页数据
     * @date 2020/12/30 1:42 下午
     * @params [alarmDailyStatis]
     */
    @DataScope
    List<Map<String, Object>> getAlarmRegionPage(@Param("page") Page<Map<String, Object>> page, @Param("alarmDailyStatis") AlarmDailyStatis alarmDailyStatis);

    /**
     * @return java.util.List<java.util.Map < java.lang.String, java.lang.Object>>
     * @author chentl
     * @description 查询处置率报警分页信息
     * @date 2020/12/31 10:20 上午
     * @params [page, alarmDailyStatis]
     */
    @DataScope
    List<Map<String, Object>> getRegionAlarmHanderRatePage(@Param("page") Page<Map<String, Object>> page, @Param("alarmDailyStatis") AlarmDailyStatis alarmDailyStatis);

    /**
     * @return java.util.List<java.util.Map < java.lang.String, java.lang.Object>>
     * @author chentl
     * @description 查询企业处置率报警分页表格
     * @date 2020/12/31 10:58 上午
     * @params [page, alarmDailyStatis]
     */
    @DataScope
    List<Map<String, Object>> getEnterpriseAlarmHanderRatePage(@Param("page") Page<Map<String, Object>> page, @Param("alarmDailyStatis") AlarmDailyStatis alarmDailyStatis);


    /**
     * @return java.util.List<com.hd.sup.modules.alarm.model.AlarmDailyStatis>
     * @author chentl
     * @description 获取当天统计数据
     * @date 2021/1/11 9:41 上午
     * @params [currentDate]
     */
    List<AlarmDailyStatis> getTodayStatisData(@Param("currentDate") String currentDate);

    /**
     * @return void
     * @author chentl
     * @description 根据 enterprise_no，statis_date,alarm_type 更新指定报警统计数据
     * @date 2021/1/11 9:47 上午
     * @params []
     */
    @DataScope
    void refreshAlarmDailyStatis(@Param("alarmDailyStatis") AlarmDailyStatis alarmDailyStatis);

    /**
     * @return Map<String, Object>
     * @author chentl
     * @description 获取报警类型数据
     * @date 2020/12/28 1:22 下午
     * @params [currentDateStr]
     */
    Map<String, Object> getDailyAlarmTypeSum(@Param("currentDateStr") String currentDateStr, @Param("deptIds") List<String> deptIds);

    /**
     * @return java.util.List<com.hd.sup.modules.export.model.RegionAlarmExport>
     * @author chentl
     * @description 统计区域报警导出数据
     * @date 2021/2/23 10:47 上午
     * @params [page, alarmDailyStatis]
     */
    List<RegionAlarmExport> getAlarmRegionExport(@Param("page") Page<AlarmDailyStatis> page, @Param("alarmDailyStatis") AlarmDailyStatis alarmDailyStatis);

    /**
     * @return java.util.List<com.hd.sup.modules.poi.model.EnterpriseAlarmExport>
     * @author chentl
     * @description 统计企业报警导出数据
     * @date 2021/2/23 11:02 上午
     * @params [page, alarmDailyStatis]
     */
    List<EnterpriseAlarmExport> getAlarmEnterpriseExport(@Param("page") Page<AlarmDailyStatis> page, @Param("alarmDailyStatis") AlarmDailyStatis alarmDailyStatis);
}
